const multer = require("multer");
const path = require("path");
const fs = require("fs");
const express = require("express");
const router = express.Router();
const db = require("../db");

// 配置multer :指定上传路径和文件

const AvatarUploadDir = path.join(__dirname, "../public/avatar");
// 确保上传目录存在
// recursive 选项为 true 时，表示在创建目录时会递归创建不存在的父目录。
// 例如，如果路径为 /a/b/c，而 /a 和 /a/b 都不存在，设置 recursive: true 会依次创建 /a、/a/b 和 /a/b/c。
if (!fs.existsSync(AvatarUploadDir)) {
  fs.mkdirSync(AvatarUploadDir, { recursive: true });
}
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    // 上传文件保存的目录
    cb(null, AvatarUploadDir);
  },
  filename: (req, file, cb) => {
    // 上传文件的文件名  确保文件名唯一 时间戳+扩展名
    // 获取文件扩展名  此方法返回包含 .
    const extname = path.extname(file.originalname);
    // 拼接唯一文件名
    const filename = `avatar-${Date.now()}${extname}`;
    cb(null, filename);
  },
});

// 不限制文件类型和大小
const upload = multer({
  storage: storage,
});

// 删除旧头像文件的辅助函数
const deleteOldAvatar = (avatarUrl) => {
  if (avatarUrl && avatarUrl.startsWith('/avatar/')) {
    const oldAvatarFilename = avatarUrl.replace('/avatar/', '');
    const oldAvatarPath = path.join(AvatarUploadDir, oldAvatarFilename);
    
    if (fs.existsSync(oldAvatarPath)) {
      try {
        fs.unlinkSync(oldAvatarPath);
        console.log('已删除旧头像文件:', oldAvatarFilename);
      } catch (err) {
        console.error('删除旧头像文件失败:', err.message);
      }
    }
  }
};

//   上传接口：单文件上传（fieldname 为 'avatar'
// 路由: POST /my/uploadAvatar
// 需要用户登录验证（使用项目中已有的token验证中间件）
router.post( "/uploadAvatar",
  (req, res, next) => {
    // 首先获取用户当前的头像信息
    const userId = req.user.id;
    const getCurrentAvatarSql = "SELECT user_pic FROM ev_users WHERE id = ?";
    
    db.query(getCurrentAvatarSql, [userId], (err, results) => {
      if (err) {
        console.error('获取用户当前头像失败:', err);
        // 即使有错误也继续上传过程
      } else if (results.length > 0 && results[0].user_pic) {
        // 保存当前头像URL，在上传成功后删除
        req.oldAvatarUrl = results[0].user_pic;
      }
      
      // 继续文件上传
      upload.single("avatar")(req, res, (err) => {
        if (err) {
          // 错误处理
          return res.send({
            status: 400,
            data: { message: `上传错误: ${err.message}` },
          });
        }

        // 上传成功
        next();
      });
    });
  },
  (req, res) => {
    try {
      // 检查文件是否上传成功
      if (!req.file) {
        return res.send({
          status: 400,
          data: { message: "未上传文件" },
        });
      }

      // 上传成功后，返回图片的访问URL（前端用于显示）
      const avatarUrl = `/avatar/${req.file.filename}`;
      console.log("头像上传成功:", avatarUrl);

      // 删除旧头像文件（如果存在且不是默认头像）
      if (req.oldAvatarUrl && req.oldAvatarUrl !== '/avatar/default.png') {
        deleteOldAvatar(req.oldAvatarUrl);
      }

      res.send({
        status: 200,
        data: { 
          message: "上传成功",
          url: avatarUrl,
          filename: req.file.filename,
          size: req.file.size,
        },
      });
    } catch (err) {
      console.error("头像上传处理错误:", err);
      res.send({
        status: 500,
        data: { message: "上传失败", error: err.message },
      });
    }
  }
);
// / 4. 保存头像URL到数据库（更新用户表）
// 路由: POST /my/saveAvatarUrl
// 需要用户登录验证（使用项目中已有的token验证中间件）
router.post('/saveAvatarUrl', (req, res) => {
  const { avatarUrl } = req.body;
  const userId = req.user.id; // 假设已通过登录验证获取用户ID（项目中已有的token验证中间件）

  // 验证参数
  if (!avatarUrl) {
    return res.send({ 
      status: 400, 
      data: { message: '头像URL不能为空' } 
    });
  }

  // 验证URL格式
  if (!avatarUrl.startsWith('/avatar/')) {
    return res.send({ 
      status: 400, 
      data: { message: '无效的头像URL格式' } 
    });
  }

  // 首先获取用户当前的头像信息
  const getCurrentAvatarSql = "SELECT user_pic FROM ev_users WHERE id = ?";
  db.query(getCurrentAvatarSql, [userId], (err, results) => {
    if (err) {
      console.error('获取用户当前头像失败:', err);
      // 即使有错误也继续更新过程
    }
    
    const oldAvatarUrl = results.length > 0 ? results[0].user_pic : null;

    // 更新数据库中的用户头像
    const SQLstr = "UPDATE ev_users SET user_pic=? WHERE id=?";
    db.query(SQLstr, [avatarUrl, userId], (err, results) => {
      if (err) {
        console.error('数据库更新头像失败:', err);
        return res.send({ 
          status: 500, 
          data: { message: '数据库更新失败', error: err.message } 
        });
      }
      
      if (results.affectedRows !== 1) {
        return res.send({ 
          status: 404, 
          data: { message: '用户不存在或头像更新失败' } 
        });
      }
      
      // 删除旧头像文件（如果存在且不是默认头像，且与新头像不同）
      if (oldAvatarUrl && oldAvatarUrl !== '/avatar/default.png' && oldAvatarUrl !== avatarUrl) {
        deleteOldAvatar(oldAvatarUrl);
      }
      
      console.log('用户头像更新成功:', userId, avatarUrl);
      res.send({ 
        status: 200, 
        data: { message: '头像更新成功', avatarUrl: avatarUrl }
      });
    });
  });
});


module.exports = router;
  
